<?php

/**
 * Objekt Hinzufügen
 *
 * Die Funktion läd ein Übergebenes Porzellan Objekt in die 
 * Datenbank und gibt die Objekt ID zurück.
 *
 * @param array  $obj_param
 * @var array  $obj_param[$id]                  Objekt Eigenschaften
 * @var mixed  $obj_param[$id][$field_name]     Tabellen Feld Inhalt
 * @var string $field_name                      SQL Tabellen Feld
 * @return int Objekt ID oder 0
 */
function add_object($obj_param) {
    $func_name = "add_object";
    //log_error("[" . $func_name . "] " . LOG_PING);

    $sql_fields = "`obj_id` ,";
    $sql_values = "NULL , ";

    foreach ($obj_param as $field_name => $field_value) {
        $sql_fields .= "`$field_name` ,";
        $sql_values .= "'$field_value' ,";
    }
    $sql_fields = substr($sql_fields, 0, -1);
    $sql_values = substr($sql_values, 0, -1);

    $sql = "INSERT INTO `objects` ("
            . $sql_fields .
            ") VALUES ("
            . $sql_values .
            ");";



    //echo "<br /><br /><h3>" . $sql . "</h3><br />";

    $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
    if (mysqli_connect_errno()) {
        log_error("[" . $func_name . "] " . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
    }


    $result = $db->query($sql);
    unset($sql);

    if (!$result) {
        log_error("[" . $func_name . "] " . ERROR_DB_QUERY . $db->error);
    }
    if ($result == false) {
        unset($result);
        return 0;
    } else {
        unset($result);
        return $db->insert_id;
    }

    return 0;
}

/**
 * Objekte Ausgeben
 *
 * Die Funktiongibt alle objekte Zurück
 *
 * @return array	Array aus PorzellanObjectArrays
 */
function get_objects() {
    $func_name = "get_objects";

    $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
    if (mysqli_connect_errno()) {
        log_error("[" . $func_name . "] " . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
    }
    // Query absetzen
    $sql = "SELECT 
				*
			FROM
				`objects`
			LEFT JOIN
				`categories`
			ON
				`objects`.`obj_cat_id` = `categories`.`cat_id`;";
    $result = $db->query($sql);
    unset($sql);

    if (!$result) {
        log_error("[" . $func_name . "] " . ERROR_DB_QUERY . $db->error);
    }
    unset($db);
    $return = array();
    while ($row = $result->fetch_assoc()) {
        $return[] = $row;
    }
    if (DEBUG_ENABLED)
        var_dump($return);
    unset($result, $func_name);
    return $return;
}

/**
 *
 * Objekte Suchen
 *
 * Die Funktion gibt alle Objekte zurück, auf die die Suchkreterien zutrefffen
 *
 * @param $find_obj[]		PorzellanObjectArray mit Suchkreterien
 * @return[]			Array aus PorzellanObjectArrays
 * 
 * * */
function find_objects($find_obj=array()) {
    $func_name = 'find_objects';
    // TODO: Eingehende Variablen Prüfen

    $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
    if (mysqli_connect_errno()) {
        log_error("[" . $func_name . "] " . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
    }

    // Query bauen
    $sql = 'SELECT * FROM `objects`';
    // Objektnamen Überprüfen
    if ((array_key_exists('obj_name', $find_obj)) && (strlen($find_obj['obj_name']) > 0)) {
        $sql .= 'WHERE `obj_name` LIKE \'%' . $find_obj['obj_name'] . '%\' ';
    }

    // Kategorie überprüfen
    if ((array_key_exists('obj_cat_id', $find_obj)) && ($find_obj['obj_cat_id'] > 0)) {
        $sql .= 'WHERE `obj_cat_id` LIKE \'' . $find_obj['obj_cat_id'] . '\' ';
    }

    // Manufaktur überprüfen
    if ((array_key_exists('obj_man_id', $find_obj)) && ($find_obj['obj_man_id'] > 0)) {
        $sql .= 'WHERE `obj_man_id` LIKE \'' . $find_obj['obj_man_id'] . '\' ';
    }

    // Marken überprüfen
    if ((array_key_exists('obj_lable_id', $find_obj)) && ($find_obj['obj_lable_id'] > 0)) {
        $sql .= 'WHERE `obj_lable_id` LIKE \'' . $find_obj['obj_lable_id'] . '\' ';
    }




    //var_dump($sql);
    $result = $db->query($sql);
    unset($sql);

    if (!$result) {
        log_error("[" . $func_name . "] " . ERROR_DB_QUERY . $db->error);
    }
    unset($db);
    $return = array();
    while ($row = $result->fetch_assoc()) {
        $return[] = $row;
    }
    if (DEBUG_ENABLED)
        var_dump($return);
    unset($result, $func_name);
    return $return;
}

/**
 * Einzelnes Objekt Ausgeben
 *
 * Gibt die Detail des übergebenen Objekts aus oder false;
 *
 * @param int $obj_id	Objekt ID
 * @return array|bool		Ein PorzellanObjectArray oder false
 */
function get_object($id=0) {
    $func_name = "get_object";

    if (check_object_id($id)) {
        $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
        if (mysqli_connect_errno()) {
            log_error("[" . $func_name . "] " . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
        }
        // Query absetzen
        $sql = "SELECT 
				*
			FROM
				`objects`
			LEFT JOIN
				`categories`
			ON
				`objects`.`obj_cat_id` = `categories`.`cat_id`
			
			WHERE 
				`obj_id` = '" . $id . "'
			LIMIT 	
				1;";
        $result = $db->query($sql);
        unset($sql);

        if (!$result) {
            log_error("[" . $func_name . "] " . ERROR_DB_QUERY . $db->error);
        }
        unset($db);
        $return = array();
        while ($row = $result->fetch_assoc()) {
            $return = $row;
        }
        unset($result, $func_name);
        return $return;
    } else
        return false;
}

/**
 * Die Funktion löscht das Objekt mit der übergebenen ID.
 * @param int $id Objekt ID
 * @return bool
 */
function del_object($id) {
    $func_name = "del_object()";
    if (check_object_id($id)) {
        $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
        if (mysqli_connect_errno()) {
            log_error("[" . $func_name . "] " . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
        }
        // Query absetzen
        $sql = "DELETE FROM `objects` 
                WHERE `obj_id` = " . $id . " 
                LIMIT 1;";
      
        $result = $db->query($sql);
        unset($sql);
        if (!$result) {
            log_error("[" . $func_name . "] " . ERROR_DB_QUERY . $db->error);
        }
        return $result;
    } else {
        return false;
    }
}

/**
 *  Die Funktion überprüft, ob die übergebene ID eine Valide Objekt ID ist.
 * @param int $id Objekt ID
 * @return bool 
 */
function check_object_id($id) {
    $func_name = "check_object_id()";
    if ((!is_numeric($id)) || ($id > 0)) {
        $db = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
        if (mysqli_connect_errno()) {
            log_error("[" . $func_name . "] " . ERROR_DB_CONNECT . mysqli_connect_error() . '(' . mysqli_connect_errno() . ')');
        }
        // Query absetzen
        $sql = "SELECT obj_id 
                FROM `objects` 
                WHERE `obj_id` = " . $id . "
                LIMIT 1;";
        
        log_message('[' . $func_name . '] QUERY: ' . $sql);
        
        $result = $db->query($sql);
        unset($sql);

        if (!$result) {
            log_error("[" . $func_name . "] " . ERROR_DB_QUERY . $db->error);
        }
        unset($db);
        $result = $result->fetch_assoc();
        if ($result['obj_id'] == $id) {
            return true;
        } else
            return false;
    } else
        return false;
}

?>
